package pl.egraveyard.dao;


/**
 * Abstrakcyjne DAO dla podstawowych operacji CRUD na wszystkich encjach.
 * Wszsytkie interfejsy DAO powinny dziedziczyć po tym interfejscie, natomaist klasy
 * powinny implementowac {@link AbstractDaoSupportImpl}
 * @author gunos
 *
 * @param <T> klasa na ktorej wykonywane beda operacje
 */
public interface AbstractDaoSupport<T> {
	/**
	 * Odczytuje obiekt o podanym id
	 * 
	 * @param id
	 *            identyfikator obiektu
	 * @return obiekt o podanym id lub null jesli nie istnieje
	 */
	T read(Integer id);
	
	/**
	 * tworzy obiekt
	 * 
	 * @param obj
	 *            obiekt do utworzenia
	 */
	void create(T obj);

	/**
	 * Modyfikuje obiekt
	 * 
	 * @param obj
	 *            obiekt do zmodyfikowania
	 */
	void update(T obj);

	/**
	 * Usuwa obiekt
	 * 
	 * @param obj
	 *            obiekt do usuniecia
	 */
	void delete(T obj);

	/**
	 * Usuwa obiekt o podanym id
	 * 
	 * @param id
	 *            id obiekt do usuniecia
	 */
	void delete(Integer id);
}
